package com.pai.gui.component;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;
import com.pai.entity.User;

/**
 * UserList 数据源对象。负责管理数据的信息
 * @author Jeff
 *
 */
public class UserListModel{

	private Vector<UserIconList> repository = new Vector<UserIconList>();
	private UserIconList bl;
	
	private Comparator<User> comparator=null;
	private List<User> sources=new ArrayList<User>();

	//通过list设置数据源
	public void setSources(List<User> sources) {
		//System.out.println("WorkingTaskListModel setSource");
		this.sources = sources;
	}
	
	// 添加一个单元
	public void addCell(User obj) {
		sources.add(obj);
		notifySourceRefreshEvent(sources);
	}

	// 根据索引删除一个单元
	public void removeCell(int index) {
		sources.remove(index);
		notifySourceRefreshEvent(sources);
	}

	// 根据值删除一个单元
	public void removeCell(User value) {
		sources.remove(value);
		notifySourceRefreshEvent(sources);
	}

	// 设置一个单元
	public void setCell(int index, User obj) {
		sources.set(index, obj);
		notifySourceRefreshEvent(sources);
	}

	// 获取一个单元的信息
	public User getCell(int index) {
		return sources.get(index);
	}

	// 获取所有单元信息
	public List<User> getAllCell() {
		return sources;
	}

	// 移除所有
	public void removeAll() {
		sources.clear();
		notifySourceRefreshEvent(sources);
	}

	public void setSort(Comparator<User> comparator) {
		this.comparator = comparator;
		notifySourceRefreshEvent(sources);
	}

	public Comparator<User> getComparator() {
		return comparator;
	}

	// 注册监听器，如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
	public void addSourceRefreshListener(UserIconList list) {
		repository.addElement(list);// 这步要注意同步问题
	}

	// 如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
	public void notifySourceRefreshEvent(List<User> event) {
		Enumeration<UserIconList> en = repository.elements();// 这步要注意同步问题
		while (en.hasMoreElements()) {
			bl = (UserIconList) en.nextElement();
			bl.sourceRefreshEvent(event);
		}
	}
	// 删除监听器，如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
	public void removeSourceRefreshListener(UserIconList srl) {
		repository.remove(srl);// 这步要注意同步问题
	}
	
	
	
	
}
